let jwt = require('jsonwebtoken')
const { basename } = require('path')
const path = require('path')
const md5 = require('../../utils/MD5');
const fs = require('fs')
const {
  Users
} = require('../../models/User.js')

// 登录
async function login(ctx, next) {
  // 解析请求参数
  let {
    username,
    pwd
  } = ctx.request.body
  let res = await Users.findOne({
    username,
    pwd
  })
  // 查询不存在，登陆失败
  if (!res) {
    ctx.body = {
      code: 300,
      msg: '登陆失败，账号或密码错误'
    }
    return
  }
  let token = jwt.sign({
    username,
    _id: res._id
  }, 'jianshu-server-jwt', {
    expiresIn: 3600 * 24
  })
  console.log(res);
  ctx.body = {
    code: 200,
    msg: "登录成功",
    token,
    msg: res
  }
}

// 注册
async function register(ctx, next) {
  // 解析请求参数
  let {
    username,
    pwd
  } = ctx.request.body
  let res = await Users.findOne({
    username
  })
  // 查询用户名已经存在，注册失败
  if (res) {
    ctx.body = {
      code: 300,
      msg: '用户名已经存在'
    }
    return
  }
  // 如果不存在就新增用户
  await Users.create({
    username,
    pwd
  }).then(res => {
    ctx.body = {
      code: 200,
      msg: '用户注册成功'
    }
  }).catch(err => {
    ctx.body = err
  })
}

// 验证用户登录
async function verify(ctx, next) {
  let token = ctx.request.header.authorization
  // 注意这里Bearer的后面有一个空格
  token = token.replace("Bearer ", "")

  let result = jwt.verify(token, "jianshu-server-jwt")
  let res = await Users.findOne({
    _id: result._id
  })
  if (!res) {
    ctx.body = {
      code: 300,
      msg: "用户验证失败"
    }
    return
  }
  ctx.body = {
    code: 200,
    msg: "用户验证成功",
    user: res
  }

}

// 修改用户密码
async function updatePwd(ctx, next) {
  let {
    _id,
    pwd
  } = ctx.request.body


  // 如果用户验证通过存在就修改用户信息
  await Users.updateOne({
    _id
  }, {
    pwd
  }).then(res => {
    if (res.n > 0) {
      ctx.body = {
        code: 200,
        msg: '密码修改成功'
      }
    }
  }).catch(err => {
    ctx.body = {
      code: 300,
      msg: err
    }
  })
}

// 图片上传
async function upload(ctx, next) {
  let { _id } = ctx.request.body

  let res = await Users.findOne({
    _id
  })
  if(res.n <= 0){
    ctx.body = {
      code: 400,
      url: `上传失败`
    }
    return
  }
  const file = ctx.request.files
  // const baseName = path.basename(file['img'].path)
  // console.log(file['img'].path.split('\\').pop());
  // let dir = file['img'].path.match(/\d{8}/)[0]
  // console.log(dir);
  let filePath = file['img'].path.split('\\').pop()
  let avatar = `${ctx.origin}/uploads/${filePath}`

  let eee = await Users.updateOne({ _id }, { avatar  })
  console.log(eee);
  ctx.body = {
    code: 200,
    url: avatar
  }
}

// 查询用户信息
async function find(ctx, next) {
  // 解析请求参数
  let {
    username
  } = ctx.request.body
  let res = await Users.findOne({
    username
  })
  // 查询不存在
  if (!res) {
    ctx.body = {
      code: 300,
      msg: '查询失败，账号或密码错误'
    }
    return
  }
  ctx.body = {
    code: 200,
    msg: res
  }
}

// 更新用户资料
async function updateMsg(ctx, next) {
  // 解析请求参数
  let {
    _id,
    sex,
    desc,
    phone,
    email
  } = ctx.request.body
  let res = await Users.updateOne({
    _id
  }, {
    sex,
    desc,
    phone,
    email
  })
  if(res.n > 0){
    ctx.body = {
      code: 200,
      msg: '更新成功'
    }
  }else{
    ctx.body = {
      code: 200,
      msg: '更新失败'
    }
  }
  console.log(res);
}

module.exports = {
  login,
  register,
  verify,
  updatePwd,
  upload,
  find,
  updateMsg
}